package com.ruoyi.rva.service;

import java.util.List;
import java.util.Map;

import com.ruoyi.rva.domain.RvaMap;
import com.ruoyi.rva.domain.RvaView;

/**
 * 视图Service接口
 * 
 * @author jiaodacailei
 * @date 2021-07-27
 */
public interface IRvaViewService 
{

    /**
     * 根据ID获取视图元数据
     *
     * @param viewId 视图ID
     * @param req
     * @return 视图
     */
    RvaView selectRvaViewById(String viewId, Map<String, Object> req);

    /**
     * 获取列表视图元数据和数据
     * @param listId 列表视图ID
     * @param searchId 查询视图ID
     * @param req
     * @return 包含Key：viewData-视图元数据RvaView，listData-视图数据List<RvaMap<String, Object>>
     */
    RvaMap selectListViewData (String listId, String searchId, RvaMap req);

    /**
     * 获取列表视图数据
     * @param listId 列表视图ID
     * @param searchId 查询视图ID
     * @param req
     * @param wheres 条件，多个条件之间是【与】的关系，举例：xxx = 'abc'
     * @return
     */
    List<RvaMap<String, Object>> selectList (String listId, String searchId, RvaMap req, String... wheres);

    /**
     * 获取【创建】表单视图元数据和数据
     * @param viewId
     * @param req
     * @return 包含Key：viewData-视图元数据RvaView，formData-视图数据RvaMap<String, Object>
     */
    RvaMap selectCreateViewData (String viewId, RvaMap req);

    /**
     * 获取【克隆】表单视图元数据和数据
     * @param viewId
     * @param req
     * @return 包含Key：viewData-视图元数据RvaView，formData-视图数据RvaMap<String, Object>
     */
    RvaMap selectCloneViewData(String viewId, RvaMap req);

    /**
     * 提交【创建】表单。克隆表单提交适用。
     * @param viewId
     * @param req
     */
    void submitCreateView (String viewId, RvaMap req);

    /**
     * 获取【修改】表单视图元数据和数据
     * @param viewId
     * @param req
     * @return 包含Key：viewData-视图元数据RvaView，formData-视图数据RvaMap<String, Object>
     */
    RvaMap selectUpdateViewData (String viewId, RvaMap req, Boolean noDataThrow);

    /**
     * 提交【修改】表单
     * @param viewId
     * @param req
     */
    void submitUpdateView (String viewId, RvaMap req);

    /**
     * 删除
     * @param viewId
     * @param req
     */
    void delete(String viewId, RvaMap req);

    /**
     * req.selection包括两行数据，则移动索引较大的行到另一行之上；如果包含一行数据，则和上一行数据交换索引值
     * @param viewId
     * @param req
     */
    void moveUp (String viewId, RvaMap req);

    /**
     * req.selection包括两行数据，则移动索引较小的行到另一行之下；如果仅包含一行数据，则和下一行数据交换索引值
     * @param viewId 列表视图ID
     * @param req
     */
    void moveDown (String viewId, RvaMap req);
}
